/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ufsj.gamedevice;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;


/**
 *
 * @author magelinha
 */
public class Logado extends Activity implements AdapterView.OnItemClickListener{

    //definição das constantes utilizadas na criação do menu
    private static final int BUSCAR = 0;
    private static final int MINHAS_AVALIACOES = 1;
    private static final int PREFERENCIAS = 2;
    
    //itens para a lista
    private ListView listView;
    private AdapterListView adapterListView;
    private ArrayList<itemListView> itens;
 
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanteState) {
        super.onCreate(savedInstanteState);
        try{
            setContentView(R.layout.logado);
            
            final EditText campo = (EditText) findViewById(R.text.jTPesquisar);
            Button botao = (Button) findViewById(R.botao.btTwitter);
            Button buscape = (Button) findViewById(R.botao.btBuscape);
            
            botao.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    try{
                        pesquisarGame(campo.getText().toString(),0);
                    }catch(Exception ex){
                        trace("Erro: " + ex.getMessage());
                    }
                }
            });
            
            buscape.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    try{
                        pesquisarGame(campo.getText().toString(), 1);
                    }catch(Exception ex){
                        trace("Erro: " + ex.getMessage());
                    }
                    
                }
            });
            
            
        }catch(Exception ex){
            for(StackTraceElement item: ex.getStackTrace()){
                trace(item.toString()+ "\n");
            }
        }
        
        
    }
    
    
    //o método abaixo é disparado quando o usuário
    //clicar no botão "Menu" do aparelho
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        try
        {
            //cria o menu e submenus
            SubMenu menuBuscar = menu.addSubMenu(BUSCAR, 0, 0, "Buscar");
            SubMenu menuMinhasAvaliacoes = menu.addSubMenu(MINHAS_AVALIACOES, 1, 0, "Minhas Avaliações");
            SubMenu menuPreferencias = menu.addSubMenu(PREFERENCIAS, 2, 0, "Preferências");        
             
            menuBuscar.setIcon(android.R.drawable.ic_menu_search);
            menuMinhasAvaliacoes.setIcon(android.R.drawable.ic_menu_gallery);
            menuPreferencias.setIcon(android.R.drawable.ic_menu_preferences);
            
        }
        catch (Exception e) {
            trace("Erro : " + e.getMessage());
        }            
        return super.onCreateOptionsMenu(menu);        
    }
 
    //o método abaixo é disparado quando o usuário clicar 
    //em algum dos itens do menu
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //de acordo com o item selecionado você executará
        //a função desejada
        switch (item.getItemId()) {
            case BUSCAR:     
                onCreate(Bundle.EMPTY);
                break;
            case MINHAS_AVALIACOES:     
                trace("Você selecionou o MINHAS_AVALIACOES");
                break;
            case PREFERENCIAS: 
                trace("Você selecionou o PREFERENCIAS");
                break;
        }
        return true;
    }    
     
    private void trace (String msg) 
    {
        Toast.makeText (getApplicationContext(), msg, Toast.LENGTH_SHORT).show ();
    }
    
    private void createListView(String jogo, int bt) {
        //Criamos nossa lista que preenchera o ListView
        
        //se clicou no botão twitter
        if(bt == 0){
            itens = (ArrayList<itemListView>) retornarTweets(jogo);
        }else{
            itens = (ArrayList<itemListView>) retornarListaBuscape(pegarPrdutosBuscape(jogo));
        }
        
        //Cria o adapter
        adapterListView = new AdapterListView(this, itens);

        //Define o Adapter
        listView.setAdapter(adapterListView);
        //Cor quando a lista é selecionada para ralagem.
        listView.setCacheColorHint(Color.TRANSPARENT);
    }
    
    public void pesquisarGame(String jogo, int bt){
        
        setContentView(R.layout.lista_twittes);

        //Pega a referencia do ListView
        listView = (ListView) findViewById(R.listas.list);
        //Define o Listener quando alguem clicar no item.
        listView.setOnItemClickListener(this);
        
        createListView(jogo,bt);
    }

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        //Pega o item que foi selecionado.
        itemListView item = adapterListView.getItem(arg2);
        //Demostração
        //Toast.makeText(this, "Você Clicou em: " + item.getTexto(), Toast.LENGTH_LONG).show();
    }
    
    public File pegarPrdutosBuscape(String jogo){
        try {
            //faz o download do arquivo
            String id = "617a5650505066355571593d"; 
            URL url = new URL("http://sandbox.buscape.com/service/findProductList/"+id+"/?keyword="+jogo);
            String destino = "arquivo.xml";
            trace("url: " + url.getPath());
            
            InputStream is = url.openStream();
            FileOutputStream fos = new FileOutputStream(destino);
            
            int bytes = 0;
            while((bytes = is.read())!= -1){
                fos.write(bytes);
            }
            
            is.close();
            fos.close();
            
            File arquivo = new File(destino);
            
            trace("arquivo existe? " + String.valueOf(arquivo.exists()));
            
            return new File(destino);
            
            
        } catch (MalformedURLException ex) {
            trace("Houve Erro: " + ex.getMessage());
            return new File("arquivo.xml");
        } catch (IOException ex){
            trace("Houve Erro: " + ex.getMessage());
            return new File("arquivo.xml");
        }
        
    }
    
    /**
     * retorna uma lista com os preços do buscapé. função feita usando o JDOM
     * @param xml
     * @return 
     */
    public List<itemListView> retornarListaBuscape(File xml){
        try {
            List<itemListView> lista = new ArrayList<itemListView>();
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(xml);
            Element root = (Element) doc.getRootElement();
            List produtos = root.getChildren("product");
            
            Iterator it  = produtos.iterator();
            int i=0;
            while(it.hasNext()){
                Element produto = (Element) it.next();
                itemListView item = new itemListView();
                item.setTexto("Produto: " + produto.getChildText("productName")+"\n"+
                        "Preço Mínimo: R$" + produto.getChildText("priceMin") + "\n" +
                        "Preço Máximo: R$" + produto.getChildText("priceMax"));
                item.setIconeRid(R.drawable.ic_launcher);
                lista.add(item);
                i++;
                
            }
            
            trace("tamanho do it: " + String.valueOf(i));
            
            return lista;
        } catch (JDOMException ex) {
            trace("Erro: " + ex.getMessage());
            return new ArrayList<itemListView>();
        } catch (IOException ex) {
            trace("Erro: " + ex.getMessage());
            return new ArrayList<itemListView>();
        }
    }
    
    public List<itemListView> retornarTweets(String jogo){
        List<itemListView> lista = new ArrayList<itemListView>();
        Twitter twitter = new TwitterFactory().getInstance();
        itemListView item;
        try {
            Query query = new Query(jogo);
            QueryResult result;
            result = twitter.search(query);
            List<Tweet> tweets = result.getTweets();
            for (Tweet tweet : tweets) {
                item = new itemListView("@" +tweet.getFromUser() + " - " + 
                        tweet.getText(), R.drawable.ic_launcher);
                lista.add(item);
                //System.out.println("@" + tweet.getFromUser() + " - " + tweet.getText());
            }
            return lista;
        } catch (TwitterException te) {
            trace("Erro na Pesquisa: " + te.getMessage());
            return new ArrayList<itemListView>();
            
        }
    }
    
    
}
